package com.zmn.plat.business.interfaces.push;

import com.zmn.common.dto.VtDTO;
import com.zmn.plat.common.dto.push.PushNoticeAppDRO;
import com.zmn.plat.model.entity.push.notice.PushNoticeAppQuery;
import com.zmn.plat.model.vo.push.PushNoticeAppVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 描述: app 公告管理业务接口类
 *
 * @author wangjie
 * @since 2020/3/23
 **/
public interface PushNoticeAppBService {

    /**
     * 描述: 分页查询
     *
     * @param query
     *            查询对象
     * @return java.util.List<com.zmn.plat.model.entity.push.notice.PushNoticeApp>
     * @author wangjie
     * @since 2020/3/23
     **/
    List<PushNoticeAppVo> listQueryByPage(PushNoticeAppQuery query);

    /**
     * 描述: 通过父级id查询部门数据
     *
     * @param pid
     *            父级id
     * @author wangjie
     * @since 2020/7/6/15:31
     **/
    List<VtDTO> listCacheDeptByPid(Integer pid);

    /**
     * 描述: 获取所有一级部门，并缓存
     *
     * @param leave
     *            级别id
     * @return java.util.List<com.zmn.common.dto.VtDTO>
     * @author wangjie
     * @since 2020/3/24
     **/
    List<VtDTO> listCacheOneDeptByLeave(Integer leave);

    /**
     * 描述: 获取所有省份 使用了缓存
     *
     * @return java.util.List<com.zmn.common.dto.VtDTO>
     * @author wangjie
     * @since 2020/3/24
     **/
    List<VtDTO> listAllCacheProvince();

    /**
     * 描述: 获取所有城市 使用了缓存
     *
     * @return java.util.List<com.zmn.common.dto.VtDTO>
     * @author wangjie
     * @since 2020/3/24
     **/
    List<VtDTO> listAllCacheCity();

    /**
     * 描述: 获取所有区县 使用缓存
     *
     * @return java.util.List<com.zmn.common.dto.VtDTO>
     * @author wangjie
     * @since 2020/3/24
     **/
    List<VtDTO> listAllCacheCounty();

    /**
     * 描述: 根据省份id查询缓存的城市数据
     *
     * @param provinceIdList
     *            省份id集合
     * @return java.util.List<com.zmn.common.dto.VtDTO>
     * @author wangjie
     * @since 2020/3/24
     **/
    List<VtDTO> listCacheCityByProvinceId(List<Integer> provinceIdList);

    /**
     * 描述: 根据城市id查询缓存的区县数据
     *
     * @param cityIdList
     *            城市id集合
     * @return java.util.List<com.zmn.common.dto.VtDTO>
     * @author wangjie
     * @since 2020/3/24
     **/
    List<VtDTO> listCacheCountyByCityId(List<Integer> cityIdList);

    /**
     * 描述: 根据平台标识公司类型查询子公司数据
     *
     * @param types
     *            公司类型
     * @param plats
     *            平台标识
     * @return java.util.List<com.zmn.common.dto.VtDTO>
     * @author wangjie
     * @since 2020/3/25
     **/
    List<VtDTO> listCompanyByTypeAndPlat(List<Integer> types, List<Integer> plats);

    /**
     * 描述:通过noticeId 查询关联数据
     *
     * @param noticeId
     *            App公告配置id
     * @return com.zmn.plat.model.vo.push.PushNoticeAppVo
     * @author wangjie
     * @since 2020/3/27
     **/
    PushNoticeAppVo listNoticeAppLinkedData(Integer noticeId);

    /**
     * 描述: 获取app推送公告
     *
     * @param engineerId
     *            工程师id
     * @param putType
     *            推送类型
     * @param putApp
     *            推送app
     * @return com.zmn.common.dto2.ResponseDTO<com.zmn.plat.dubbo.dto.push.PushNoticeAppDRO>
     * @author wangjie
     * @since 2020/3/31
     **/
    PushNoticeAppDRO listPushNoticeApp(Integer engineerId, Integer putType, Integer putApp);

    /**
     * 描述: 定时任务检查方法，定时检查过期数据 状态修改为 no
     *
     * @return com.zmn.common.dto2.ResponseDTO<java.lang.String>
     * @author wangjie
     * @since 2020/4/23
     **/
    void modifyBatchStatusToNo();

    /**
     * 描述: 保存或者修改
     *
     * @param pushNoticeAppVo
     *            消息通知对象
     * @param operator
     *            操作员
     * @return com.zmn.common.dto2.ResponseDTO<java.lang.String>
     * @author wangjie
     * @since 2020/3/23
     **/
    void saveAndEdit(PushNoticeAppVo pushNoticeAppVo, String operator);

    /**
     * 描述: 上传导入excel
     *
     * @param file
     *            文件对象
     * @param noticeId
     *            公告id
     * @param operator
     *            操作员
     * @return com.zmn.common.dto2.ResponseDTO<java.lang.String>
     * @author wangjie
     * @since 2020/3/30
     **/
    String importExcel(MultipartFile file, Integer noticeId, String operator);

    /**
     * 描述: 提交定时任务
     *
     * @param noticeId
     *            公告id
     * @param operator
     *            操作员
     * @author wangjie
     * @since 2020/4/1
     **/
    void submitPushMsgTask(Integer noticeId, String operator);

    /**
     * 描述: 推送消息到app
     *
     * @param noticeId
     *            推送消息Id
     * @param operator
     *            操作员
     * @author wangjie
     * @since 2020/3/30
     **/
    void submitPushMsgToApp(Integer noticeId, String operator);

}
